home *** CD-ROM | disk | FTP | other *** search
- // this example shows the usage of the 'PowerD Progress Port'
- // just run this and execute some PowerD compilation
-
- MODULE 'exec/ports',
- 'exec/tasks',
- 'dos/dos'
-
- ENUM PROGRESS_None,
- PROGRESS_Error,
- PROGRESS_Done,
- PROGRESS_NotDone,
- PROGRESS_Cleaning,
- PROGRESS_Working,
- PROGRESS_Scanning,
- PROGRESS_Writing,
- PROGRESS_Compiling,
- PROGRESS_Linking,
- PROGRESS_PreProcessing,
- PROGRESS_Break,
- PROGRESS_SavingModule
-
- OBJECT progressmsg
- mn:MN,
- operation:UL,
- a/b/c/d/e:L
-
- PROC main()
- DEF port:PTR TO MP,msg:PTR TO progressmsg,signal
- IF port:=CreateMsgPort()
- port.LN.Name:='PowerD Progress Port'
- port.LN.Pri:=-128
- AddPort(port)
-
- DEF exit=FALSE
-
- PrintF('Press Ctrl+C to break.\n')
-
- REPEAT
- signal:=Wait(1<<port.SigBit|SIGBREAKF_CTRL_C)
- IF signal&1<<port.SigBit
- WHILE msg:=GetMsg(port)
- SELECT msg.operation
- CASE PROGRESS_Done; PrintF('Done.\n')
- CASE PROGRESS_NotDone; PrintF('Not done.\n')
- CASE PROGRESS_Cleaning; PrintF('Cleaning...\n')
- CASE PROGRESS_Working; PrintF('Working...\n')
- CASE PROGRESS_Scanning; PrintF('Scanning (\d) \s...\n',msg.a,msg.b)
- CASE PROGRESS_Writing; PrintF('Writing (\d\%=\d/\d)...\n',msg.a,msg.b,msg.c)
- CASE PROGRESS_Compiling; PrintF('Compiling...\n')
- CASE PROGRESS_Linking; PrintF('Linking...\n')
- CASE PROGRESS_PreProcessing; PrintF('PreProcessing (\d)...\n',msg.a)
- CASE PROGRESS_SavingModule; PrintF('Saving Module...\n')
- CASE PROGRESS_Break; PrintF('***Break.\n')
- CASE PROGRESS_Error; PrintF('Error(\d) on line \d: \s\n',msg.a,msg.c,msg.b)
- // msg.d is pointer to source code (READ ONLY!!!!!)
- // msg.e is position in the source code
- ENDSELECT
- ReplyMsg(msg)
- ENDWHILE
- ELSEIF signal&SIGBREAKF_CTRL_C
- exit:=TRUE
- ENDIF
- UNTIL exit
-
- RemPort(port)
- DeleteMsgPort(port)
- ENDIF
- ENDPROC
-